#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QElapsedTimer>
#include <QMainWindow>
#include <QDebug>
#include <QTimer>
#include <QScreen>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDir>
#include <QFileInfo>
#include <QSet>
#include <QDateTime>
#include <QDialog>
#include "logindialog.h"
#include "pluginmanager/pluginmanager.h"
#include "maxtool/max_stackwidget.h"
#include "displaywidget.h"
#include <QApplication>
#include <QProcess>
// #include "pluginmanager/IPlugin.h"
QT_BEGIN_NAMESPACE
namespace Ui
{
    class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    // bool eventFilter(QObject *obj, QEvent *event) override;

private slots:
    // void onHotSwapClicked();
    void handlePluginMessage(QString pluginName, QString msg);
    void handlePluginUI(QString pluginName, QWidget *plugin_ui);

    // void onTimeout()
    // {
    //     // QElapsedTimer estimer;
    //     // estimer.start(); // 开始计时
    //     outputJson = modifyJsonData(configJson);
    //     // saveJsonToFile(outputJson, "config/out2.json");
    //     // qint64 elapsed = estimer.elapsed(); // 获取耗时（毫秒）
    //     // qDebug() << "used time: " << elapsed << "ms";

    //     // qDebug() << "outputJson: " << outputJson;
    //     // qDebug() << "configJson: " << configJson;
    //     IPlugin *plugin_datablock_t = m_manager.getPlugin("plugin_datablock");
    //     plugin_datablock_t->sendMessageToPlugin(outputJson);
    //     IPlugin *plugin_database_t = m_manager.getPlugin("plugin_database");
    //     plugin_database_t->sendMessageToPlugin(outputJson);
    // }

    void on_pb_login_released();

private:
    Ui::MainWindow *ui;
    QWidget *plugin_ui_p;
    LoginDialog *mLogin = NULL;
    PluginManager m_manager;
    uint8_t load_cnt = 0;
    max_stackwidget *stackWidget; // 声明自定义 stackWidget
    displaywidget *display_widget;
    void ui_init();
    QString configJson = "";
    QString outputJson;
    int pluginSize = -1;
    void config_init(QString path);
    void plugin_init(
        QString path,
        void (MainWindow::*PluginUI_load_slot)(QString, QWidget *));
    QString generateJsonData();
    QTimer *timer_data;
    // QString modifyJsonData(const QString &jsonInput);
    void saveJsonToFile(const QString &jsonString, const QString &filePath);
    void updatePermission(const QString &newPermission);
    void restartApplication();
    // void updatePluginList();
};
#endif // MAINWINDOW_H